server { ... # 匹配所有路径,但它的优先级没那么高。 location / { uwsgi_pass 127.0.0.1:9015; include uwsgi_params; client_max_body_size 100m; } # 匹配用户上传文件,此路径为发布后产生数据,与程序分离。 location ^~ /upfiles/ { root /var/www/wiki/upfiles; } # 匹配“程序中(开发时)”静态图片等资源的访问,如果设置了专门的静态资源目录则不必这样,直接路径匹配就行了。 location ~* \.(gif|jpg|jpeg|css|js|html|png|icon|ico) { root /var/www/wiki/static; } # 匹配指定的路径 location = /MP_verify_jHKS6G8vxpo1QPfs.txt { default_type text/html; return 200 "jHKS6G8vxpo1QPfs"; } ... }
location的语法
语法:[=|~|~*|^~|@] /uri/ { ... }
第一部分,匹配命令有如下几个,也可以没有这部分:
= 精确匹配 ~ 使用正则表达式匹配,区分大小写 ~* 使用正则表达是匹配,不区分大小写 ^~ 普通字符匹配,如果这个匹配,将停止后面的匹配 @
第二部分,是uri
location优先级
- (1) = 如果有这个匹配,则立即停止搜索。
- (2) 常规匹配中将按照最长匹配的规则,它是一个临时值会继续向下匹配;如果规则中使用^〜前缀并且被匹配,搜索停止;如果常规匹配刚好完全“等于”规则路径,则终止后续匹配。
- (3) 正则表达式,按照在配置文件中定义的顺序匹配。
- (4) 如果在寻找普通匹配的最大匹配过程中,遇到了有正则表达式匹配到了就以正则表达式为准,停止普通匹配的搜索。如没有遇到匹配的正则表达式,则使用匹配到的最大的普通匹配(也就是规则2的匹配结果)。
附加解释:正则匹配会覆盖常规匹配,但是常规匹配中有特例会终止匹配过程“^~”和“完全匹配”。